import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  //所有共享的数据都放到state中存储
  state: {
    count:0
  },
  mutations: {
    //只能通过mutations 变更store中数据
    add(state) {
      //定义add方法修改count
      state.count++
    },

    //mutation中不能执行异步操作
    // add(state) {
    //   setTimeout(() => {
    //     state.count++
    //   },1000)
    // },


    //定义带参数step的 mustation 函数
    addN(state,step) {
        state.count += step
    },
    //定义sub方法
    sub(state) {
      state.count--
    },
    //定义带参数的 mustation 函数
    subN(state,step) {
        state.count -= step
    }
  },

  //所有的异步操作都在这里执行
  actions: {
    //定义一个异步操作的方法
    addAsync(context) {
      setTimeout(() => {
        //在action中不允许修改state中的数据必须通过context.commit()触发mutations,通过mutations来修改
        context.commit('add')
      },1000)
    },
    //带参数的异步操作
    addNasync(context,step) {
      setTimeout(() => {
        context.commit('addN',step)
      },1000)
    },
    subNasync(context) {
      setTimeout(() => {
        context.commit('sub')
      },1000)
    }
  },
  getters: {
    showNum(state) {
      return '当前最新的数据是:' + state.count
    }
  },
  modules: {
  }
})
